package org.example.service;

import cn.hutool.core.util.ObjectUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.example.common.ResultCode;
import org.example.common.config.JwtTokenUtils;
import org.example.dao.UserDao;
import org.example.entity.Account;
import org.example.entity.User;
import org.example.exception.CustomException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


@Service
public class UserService {
    @Autowired
    UserDao userDao;
    public User userLogin(User user) {
        //1.拿到用户传来的用户名，先到数据库查看这个用户名是否存在,如果不存在抛出异常：“用户不存在”
        User dbUser = userDao.findByName(user.getUserName());
        if (ObjectUtil.isEmpty(dbUser)){
            throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
        }
        //2.如果用户存在，则那用户输入的密码跟数据库找到的用户的密码比对，密码输入正确，允许登录
        String password = user.getPassword(); //用户输入的密码
        String dbPassword = dbUser.getPassword(); // 数据库找到用户的密码
        if (!password.equalsIgnoreCase(dbPassword)){
            throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
        }
        return dbUser;
    }

    /**
     * 这里的注册是指登录首页的注册
     */
    public User addUser(User user) {
        //1.拿到用户传来的用户名，先到数据库查看这个用户名是否存在,如果不存在抛出异常：“用户不存在”
        User dbUser = userDao.findByName(user.getUserName());
        if (ObjectUtil.isNotEmpty(dbUser)) {
            //如果有重复的注册名，就抛出异常。
            throw new CustomException(ResultCode.USER_EXIST_ERROR);
        } else {
            //表示没有重复值，就插入数据
            int affected = userDao.addUser(user);
            if (affected > 0) {
                //throw  new CustomException(ResultCode.SUCCESS);
                return user;
            }
        }
        return null;
    }

    //根据用户id查找
    public User findById(Integer id) {
        return userDao.findById(id);
    }


    /**
     * 删除用户信息
     */
    public void delete(Integer id) {
        userDao.deleteByPrimaryKey(id);
    }


    /**
     * 分页查询和模糊查询
     */
    public PageInfo<User> findPage(User search, Integer pageNum, Integer pageSize) {
        Account user = JwtTokenUtils.getCurrentUser();
        if (ObjectUtil.isEmpty(user)) {
            throw new CustomException(ResultCode.USER_NOT_LOGIN);
        }
        //开启分页
        PageHelper.startPage(pageNum, pageSize);
        List<User> all = findByCondition(search);
        return PageInfo.of(all);
    }

    /**
     * 根据查询条件查询
     */
    public List<User> findByCondition(User search) {
        return userDao.findBySearch(search);
    }

    /**
     * 编辑用户信信
     */
    public User userEdit(User user) {
        String userName = user.getUserName();
//     1.先校验用户名是不是为空： 如果用户名，为空，抛出异常
        if (ObjectUtil.isEmpty(userName)){
            throw new CustomException(ResultCode.USERNAME_ISNULL);
        }
        userDao.updateByPrimaryKeySelective(user);
        return user;
    }

    public User userRegister(User user){
        String userName = user.getUserName();
        //1.先校验用户名是不是为空： 如果用户名，为空，抛出异常
        if (ObjectUtil.isEmpty(userName)) {
            throw new CustomException(ResultCode.USERNAME_ISNULL);
//            return Result.error();
        }
        if (ObjectUtil.isEmpty(user.getAvatar())) {
            user.setAvatar("http://localhost:9090/files/default.jpg");
            if (ObjectUtil.isEmpty(user.getPassword())){
                user.setPassword("123456");
            }
            //没有重复值，就插入数据
            int affected = userDao.insertSelective(user);
            if (affected > 0) {
                //throw  new CustomException(ResultCode.SUCCESS);
                return user;
            }
        }
        return null;
    }

}
